/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.proyectos.ejb;

import com.proyectos.abstrac.BeanAbstract;
import com.proyectos.model.Matriculas;
import com.proyectos.model.PreguntasProyectos;
import com.proyectos.model.Proyectos;
import com.proyectos.model.alumnos;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Jose
 */
@Stateless
public class AlEjb extends BeanAbstract<alumnos> implements AlEjbLocal {

    public AlEjb() {
        super(alumnos.class);
    }

    @Override
    protected void validateNew(alumnos entity) throws Exception {
        Query query = this.getEntityManager().createNamedQuery("alumnos.findByCodigo");
        query.setParameter("ccodigo",entity.getCcodigo());
        query.setParameter("ncarrera",entity.getNcarrera());
        List vlista = query.getResultList();
        if (!vlista.isEmpty())
        {
            throw new Exception("ya existe un alumno con este codigo");
        }
    }

    @Override
    public List<Proyectos> obtenerProyecto(alumnos alumno,List<PreguntasProyectos> ventrada) throws Exception {
        EntityManager em = this.getEntityManager();
        List<Proyectos> retorno = new ArrayList<Proyectos>();
        try{
            Query que = em.createNamedQuery("Proyectos.findAll");
            que.setParameter("ncarrera", alumno.getNcarrera());
            List<Proyectos> vtemp = que.getResultList();
            for (Proyectos pro:vtemp)
            {
                pro.valorar(ventrada);
                retorno.add(pro);
            }
            Collections.sort(retorno);
        }catch(Exception e)
        {
            this.getContext().setRollbackOnly();
            throw e;
        }
        return retorno;
    }

    @Override
    public void assignarProyecto(alumnos alumno,Proyectos proyecto) throws Exception
    {
         MatEjbLocal ejb;
         List<Matriculas> lista;
         
         Query que = this.getEntityManager().createNamedQuery("Matriculas.findByUkPro");
         que.setParameter("ncarrera",alumno.getNcarrera());
         que.setParameter("ncurso", alumno.getNcarrera().getCursoActivo());
         que.setParameter("nalumno", alumno);
         List<Matriculas> vmat = que.getResultList();
         if (vmat.isEmpty())
         {
             throw new Exception("El alumno no esta matriculado o ya tiene proyecto asignado");
         }else{
             Matriculas mat= vmat.get(0);
             mat.setNproyecto(proyecto);
             this.getEntityManager().merge(mat);
             
         }
                     
    }
 

}
